package top.wanzc.java.basic.bit.calculation;

public class BitCalculationDemo {
	
	public static void main(String[] args) {
		System.out.println(getBit1Number1(5));
		System.out.println(getBit1Number2(5));
	}
	
	private static int getBit1Number1(int i) {
		System.out.println(Integer.toBinaryString(i));
		int result = 0;
		while (i > 0) {
			result++;
			i &= (i - 1);
		}
		// 求与法
		// 观察一下n与n-1这两个数的二进制表示
		// 最末位一个1会变成0
		// 最末位一个1之后的0会全部变成1
		//  x = 1011 0000
		// x-1= 1010 1111
		// 于是，n&(n-1)这个操作，可以起到“消除最后一个1”的功效。
		return result;
	}
	
	private static int getBit1Number2(int i) {
		int result = 0;
		int index = 0;
		do {
			if ((i & 1) == 1) {
				result++;
			}
			i >>= 1;
			index++;
		} while (index < 32);
		return result;
	}

}
